package org.ccay.core.request;

import java.io.Serializable;
import java.util.Map;

/**
 * 请求上下文，包含应用程序凭证、用户凭证、当前语种、自定义项等
 * @author chaowangbang
 * @since 2011-8-26
 */
public interface IRequestContext extends Serializable { 
	/**
	 * 获取当前应用信息
	 * @return 当前应用信息
	 */
	IApplicationPrincipal getApplication();
	/**
	 * 获取当前用户凭证
	 * @return 当前用户凭证
	 */
	IUserPrincipal getUser();
	
	/**
	 * 设置用户
	 * @param user
	 */
	void setUser(IUserPrincipal user);
	
	/**
	 * 获取用户语种
	 * @return
	 */
	String getUserLanguage();
	/**
	 * 获取用户IP
	 * @return
	 */
	String getUserIp();
	/**
	 * 向当前请求上下文中加入自定义对象
	 * @param key
	 * @param value
	 */	
	void setItem(String key,Object value);
	/**
	 * 从当前请求上下文中获取自定义对象
	 * @param key
	 * @return
	 */
	Object getItem(String key);		
	/**
	 * 获取请求上下文中的所有自定义对象
	 */
	Map<String,Object> getItems();
	
	/**
	 * 获取请求上下文中的session自定义对象
	 */
	Map<String,Serializable> getSession();
	
	/** 
	 * 获取SessionId
	 * @author chaowangbang
	 * @since 2012-8-24
	 * @return
	 */
	String getSessionId();
	
	/** 
	 * 是否跳过安全检查
	 * @author chaowangbang
	 * @since 2012-7-4
	 * @return
	 */
	boolean isSkipSecurityCheck();
}
